#ifndef TestUses_h
#define TestUses_h

#include <vector>
#include <cppunit/extensions/HelperMacros.h>
#include "Uses.h"
#include "Type.h"

class UsesTest : public CPPUNIT_NS::TestFixture 
{
	Type::List::Var validVarInput, invalidVarInput,nonExistVarInput;
	Type::List::Line validLineInput, invalidLineInput, nonExistLineInput;
	Type::List::Proc validProcInput, invalidProcInput, nonExistProcInput;
	Type::List::LineEntity validEntityInput, invalidEntityInput;
	Type::Map::Bit validLineBitMap, validProcBitMap, invalidBitMap;

	Uses usesTb;
	std::string msg;

	CPPUNIT_TEST_SUITE( UsesTest );
	CPPUNIT_TEST( testSetUses );
	CPPUNIT_TEST( testSetBitMap);
	CPPUNIT_TEST( testGetUses );
	CPPUNIT_TEST( testGetUsed );
	CPPUNIT_TEST( testIsUses );
	CPPUNIT_TEST( testIsExists );
	CPPUNIT_TEST_SUITE_END();
private:
	void testSetLineUses(Type::List::Line, Type::List::LineEntity, Type::List::Var, bool, std::string);
	void testSetProcUses(Type::List::Proc, Type::List::Var, bool, std::string);
	void testSetLineBitMap(Type::Map::Bit, bool, std::string);
	void testSetProcBitMap(Type::Map::Bit, bool, std::string);
	void testGetLinesUse(Type::Index::Var, Type::Entity::Line, bool, Type::List::Line, std::string);
	void testGetProcsUse(Type::Index::Var, Type::List::Proc, std::string);
	void testGetUsedByLine(Type::Index::Line, Type::List::Var, std::string);
	void testGetUsedByProc(Type::Index::Proc, Type::List::Var, std::string);
	void testIsLineProcUses(std::string);
	void setupLineProcBitMap();
	void testIsLineUses(Type::Index::Line, Type::List::Var, bool, std::string);
	void testIsProcUses(Type::Index::Proc, Type::List::Var, bool, std::string);
	void testIsExists(Type::List::Line, Type::List::Proc, Type::List::Var, bool, std::string);
public:
	void setUp();
	void tearDown();

	void testSetUses();
	void testSetBitMap();
	void testGetUses();
	void testGetUsed();
	void testIsUses();
	void testIsExists();
};
#endif